// utils/avatar.js

// 1) 从线上 avatarUrl 提取扩展名（优先 URL 后缀，其次 format 参数），都没有就兜底 .jpg
export function extFromAvatarUrl(url) {
  if (!url || typeof url !== "string") return ".jpg";

  // 1. 末尾显式后缀（.jpg/.png...）
  const suffixMatch = url.match(/\.(jpg|jpeg|png|gif|webp)(?:\?|#|$)/i);
  if (suffixMatch) return "." + suffixMatch[1].toLowerCase();

  // 2. 常见 CDN 参数格式：?format=jpg 或 .../format/jpg
  const formatMatch = url.match(
    /(?:[?&]format=|format\/)(jpg|jpeg|png|gif|webp)/i
  );
  if (formatMatch) return "." + formatMatch[1].toLowerCase();

  // 3. 兜底
  return ".jpg";
}

// 2) 根据 avatarUrl 先确定扩展名，再把 downloadFile 的 tempFilePath 持久化/拷贝为“带后缀路径”
// 返回 Promise<{ filePath, ext }>
export function ensureFileHasExt(avatarUrl, tempFilePath) {
  const ext = extFromAvatarUrl(avatarUrl);

  // 兼容 xhs / wx
  const runtime = typeof xhs !== "undefined" ? xhs : wx;
  const fs = runtime.getFileSystemManager();
  const USER_PATH =
    (runtime.env && runtime.env.USER_DATA_PATH) || "wxfile://user";
    console.log(runtime)
    console.log(USER_PATH)

  // 目标持久化路径（带后缀）
  const destPath = `${USER_PATH}/avatar_${Date.now()}${ext}`;
  console.log(destPath)

  return new Promise((resolve, reject) => {
    // 优先尝试 saveFile（能直接指定目标路径的实现就用它）
    if (fs.saveFile) {
      fs.saveFile({
        tempFilePath,
        filePath: destPath,
        success: () => resolve({ filePath: destPath, ext }),
        fail: () => fallbackCopy(),
      });
    } else {
      fallbackCopy();
    }

    function fallbackCopy() {
      // 读取二进制再写入一个带后缀的新文件
      fs.readFile({
        filePath: tempFilePath,
        success: (r) => {
          fs.writeFile({
            filePath: destPath,
            data: r.data, // 直接传二进制
            // encoding 不要设，保持二进制
            success: () => resolve({ filePath: destPath, ext }),
            fail: (e) => reject(e),
          });
        },
        fail: (e) => reject(e),
      });
    }
  });
}